﻿///////////////////////////////////////////////////////////////////////////////
// Copyright 2016 lingzimaike@gmail.com
// GPLv2
// Author: lingzimaike
///////////////////////////////////////////////////////////////////////////////

#ifndef PAPA_THREAD_LOCK_GUARD_H_
#define PAPA_THREAD_LOCK_GUARD_H_

#include <papa/base.h>

namespace papa {
namespace thread {

	template<class T>
	class LockGuard
	{
	public:
		LockGuard(T& lock)
			: lock_(lock)
		{
			lock_.Lock();
		}

		~LockGuard(void)
		{
			lock_.Unlock();
		}

	private:
		T& lock_;

		PAPA_DISALLOW_COPY_AND_ASSIGN(LockGuard)
	};

}}  // namespace papa

#endif // PAPA_THREAD_LOCK_GUARD_H_
